package com.java.interfaceLearn;

/**
 * @author Lenl
 * @create 2021-05-31 10:46
 * 接口的使用
 *  1.接口使用interface来定义
 *  2.Java中，接口和类是两个并列的结构
 *  3.如何定义接口：定义接口中的成员
 *      3.1 JDK7及以前：只能定义全局常量和抽象方法
 *          >全局常量：public static final的,但可以省略
 *          >抽象方法：public abstract的
 *      3.2JDK8除了定义全局常量和抽象方法外，还可以定义静态方法、默认方法(略)
 *  4.接口中不能定义构造器，意味着接口不能实例化
 *  5.Java开发中，接口通过让类去实现(implements)的方式来使用
 *      如果实现类覆盖了接口中所有抽象方法，则此实现类可以实例化
 *      如果没有覆盖所有抽象方法，则实现类仍为一个抽象类
 *  6.Java类可以实现多个接口==》弥补了Java单继承性的局限
 *      格式：class A extends B implements C,D,E
 *
 *  7.接口和接口之间可以多继承
 *
 *  8.接口的使用体现多态性
 *  9.接口实际可以看作一种规范
 */
public class InterfaceTest {
    public static void main(String[] args) {
        Plane p=new Plane();
        p.fly();
    }
}

interface Flyable{

    //全局常量
    public static final int MAX_SPEED=7900;//第一宇宙速度
        //public static final可以省略
    int MIN_SPEED=1;

    //抽象方法
    public abstract void fly();

    //可省略public abstract
    void stop();
}

interface  Attackable{
    int BASIC_ATTACK=100;
    void Attack();
}


//实现接口
class  Plane implements Flyable{
//实现接口的抽象方法
    @Override
    public void fly() {
        System.out.println("飞机通过引擎飞");
    }

    @Override
    public void stop() {
        System.out.println("驾驶员减速停止");
    }
}



//未实现接口的全部方法，则为抽象类
abstract class Kite implements Flyable{
    @Override
    public void fly() {
        System.out.println("风筝迎风飞");
    }
}

class Bullet extends Object implements Flyable,Attackable{

    @Override
    public void fly() {

    }

    @Override
    public void stop() {

    }

    @Override
    public void Attack() {

    }
}

//********接口的继承*********//
interface  AA{
    void method1();
}

interface  BB{
    void method2();
}
interface  CC extends AA,BB{
    void method3();
}
class InterFaces implements CC{

    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }

    @Override
    public void method3() {

    }
}